home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 26 / Cream of the Crop 26.iso / doom / turric03.zip / TURRIC03.ZIP / PROGS / THROWAXE.QC < prev    next >
Text File  |  1997-01-08  |  4KB  |  132 lines

  1. /*==========================================================================
  2. ThrowAxe.qc - Release 2.1
  3.  
  4. 8/17/96 - Steve Bond (wedge@nuc.net) MDL by John Guthrie(choryoth@nuc.net)
  5. ==========================================================================*/
  6.  
  7. void() AxeTouch =
  8. {
  9.     local   float   clink;
  10.     local   entity  stemp;
  11.  
  12. // Ignore axe's owner if the axe hasn't bounced yet.
  13.     if (other == self.owner && self.num_bounces == 0)
  14.         return;
  15.  
  16. // Make the axe tumble, set movetype to bounce
  17.     self.avelocity = '300 300 300';
  18.     self.movetype = MOVETYPE_BOUNCE;
  19. //make the axes' bounding box larger so they are easier to pick up.
  20.     setsize (self, '-1 -2 -3' , '1 2 3');
  21.  
  22.     if (other.classname == "player" && self.velocity == '0 0 0')
  23.     {
  24. //** PATCH_BEGIN - morph2 - Turrican ****
  25. // Stops morphed players from picking up throwing axes.
  26.         if (!other._can_get_p(self,other))
  27.             return;
  28. //** PATCH_END - morph2 - Turrican ******
  29.         sound (other, CHAN_ITEM, "weapons/pkup.wav", 1, ATTN_NORM);
  30.         sprint(other,"You Got A Throwing Axe\n");
  31.         other.num_axes = other.num_axes + 1;
  32.  
  33. //** PATCH_BEGIN - morph2 - Turrican ****
  34. // Stops game crashing.
  35. //        self.currentammo = self.num_axes;
  36. //        W_SetCurrentAmmo ();
  37. //** PATCH_END - morph2 - Turrican ******
  38.  
  39.         stemp = self;
  40.         self = other;
  41.         W_SetCurrentAmmo();
  42.         self = stemp;
  43.  
  44.         remove(self);
  45.     }
  46.  
  47.  
  48.     if (other.takedamage && self.velocity != '0 0 0')
  49.     {
  50. //** PATCH_BEGIN - throwaxe - Turrican ****
  51. // Sound for axe hitting damagable entities.
  52.         sound (self, CHAN_WEAPON, "zombie/z_hit.wav", 1, ATTN_NORM);
  53. //** PATCH_END - throwaxe - Turrican ******
  54.         // If the Axe hits them before it bounces, do 45 damage
  55.         if (self.num_bounces == 0)
  56.         {
  57.             spawn_touchblood (40);
  58.             SpawnChunk (self.origin,self.velocity);
  59.             other.punchangle_x = -20;
  60.             other.axhitme = 1;
  61.             T_Damage (other, self, self.owner, 40);
  62.         }
  63.         else
  64.         {
  65.             // The axe has bounced, so do 8 damage
  66.             other.punchangle_x = -10;
  67.             spawn_touchblood (15);
  68.             self.velocity = self.velocity * -0.5;
  69.             other.axhitme = 1;
  70.             T_Damage (other, self, self.owner, 8);
  71.         }
  72.     }
  73.     else
  74.     {
  75.         clink = random() * 2;
  76.         if (clink <=1)
  77.             sound (self, CHAN_WEAPON, "player/axhit2.wav", 1, ATTN_NORM);
  78.         else
  79.             sound (self, CHAN_WEAPON, "weapons/tink1.wav", 1, ATTN_NORM);
  80.     }
  81.  
  82. // Count the bounces.
  83.     self.num_bounces = self.num_bounces + 1;
  84. // If it has bounced more than 22 times, remove the axe.
  85. // It is most likely stuck and causing an incredibly
  86. // annoying noise.
  87.     if (self.num_bounces > 22)
  88.         SUB_Remove();
  89. };
  90.  
  91. void() W_ThrowAxe =
  92. {
  93.     local   entity missile;
  94.  
  95.     sound (self, CHAN_WEAPON, "weapons/woosh.wav", 1, ATTN_NORM);
  96.  
  97.     self.punchangle_x = -6;
  98.  
  99.     missile = spawn ();
  100.     missile.owner = self;
  101.     missile.movetype = MOVETYPE_FLYMISSILE;
  102.     missile.solid = SOLID_TRIGGER;
  103.  
  104. // set missile speed
  105.     makevectors (self.v_angle);
  106.     missile.velocity = aim(self, 10000);
  107.  
  108.     missile.angles = vectoangles(missile.velocity);
  109.  
  110.     missile.velocity = missile.velocity * 600;
  111.     missile.touch = AxeTouch;
  112.  
  113. // set missile duration
  114.     missile.nextthink = time + 600;
  115.     missile.think = SUB_Remove;
  116.  
  117.     setmodel (missile, "progs/throwaxe.mdl");
  118.     setsize (missile, '0 0 0' , '0 0 0');
  119.     setorigin (missile, self.origin + v_forward*2 + '0 0 16');
  120.     missile.avelocity ='-500 0 0';
  121.     missile.num_bounces = 0;
  122. //** PATCH_BEGIN - throwaxe - Turrican ****
  123.     missile.classname = "missile";
  124. //** PATCH_END - throwaxe - Turrican ******
  125.  
  126.     self.num_axes = self.num_axes - 1;
  127.     self.currentammo = self.num_axes;
  128.  
  129.     W_SetCurrentAmmo ();
  130. };
  131.  
  132.